package cn.mesmile.lock.service;

import cn.hutool.core.text.StrBuilder;

import java.util.*;

/**
 * @author zb
 * @date 2020/12/11 10:44
 * @Description
 */
public class TestNumber {

    /**
     * 有这样一道智力题：“某商店规定：三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶，她最多可以换多少瓶汽水喝？”答案是5瓶，
     * 方法如下：先用9个空瓶子换3瓶汽水，喝掉3瓶满的，喝完以后4个空瓶子，用3个再换一瓶，喝掉这瓶满的，这时候剩2个空瓶子。
     * 然后你让老板先借给你一瓶汽水，喝掉这瓶满的，喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶，
     * 最多可以换多少瓶汽水喝？
     *
     * @param n
     * @return
     */
    public static int f(int n) {
        if (n == 1) {
            return 0;
        }
        if (n == 2) {
            return 1;
        }
        // n/3是能直接换到的汽水数，n%3+n/3是新换到的汽水瓶子+上次换剩下的
        return n / 3 + f(n % 3 + n / 3);
    }

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            if (n > 1000) {
                n = 999;
            }
            List<Integer> list = new ArrayList<Integer>();
            for (int i = 0; i < n; i++) {
                list.add(i);
            }
            int i = 0;
            while (list.size() > 1) {
                i = (i + 2) % list.size();
                list.remove(i);
            }
            System.out.println("list.size() = "+list.size());
            System.out.println(list.get(0));
        }

        if(true){
            return;
        }


        // TODO Auto-generated method stub
//        Scanner sc = new Scanner(System.in);
//        while (sc.hasNext()) {
//            int num = sc.nextInt();
//            if (num != 0) {
//                System.out.println(f(num));
//            }
//        }
//        sc.close();

        Scanner scanner2 = new Scanner(System.in);
        while (scanner2.hasNext()) {
            String next = scanner2.next();
            if ("0".equals(next)){
                return;
            }
            StrBuilder strBuilder = new StrBuilder();
//            String[] split = next.split("");
//            List<String> strings = new ArrayList<>(split.length);
//            for (String s : split) {
//                if (!strings.contains(s)){
//                    strings.add(s);
//                    strBuilder.append(s);
//                }
//            }
            char[] chars = next.toCharArray();
            Set<Character> characters = new HashSet<>();
            for (int i = 0; i < chars.length; i++) {
                if (characters.add(chars[i])) {
                    strBuilder.append(chars[i]);
                }
            }
            System.out.println(strBuilder.toString());
        }
        System.out.println("*************************************");


        TreeSet<Integer> integers = new TreeSet<>();
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int i = scanner.nextInt();
            if (i == 0) {
                for (Integer integer : integers) {
                    System.out.println(integer);
                }
                return;
            }
            integers.add(i);
        }
        scanner.close();



        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

        String str = "0xAF";
        Integer decode = Integer.decode(str);
        System.out.println(decode);

        test();
    }


    /**
     * 明明想在学校中请一些同学一起做一项问卷调查，为了实验的客观性，他先用计算机生成了N个1到1000之间的随机整数（N≤1000），
     * 对于其中重复的数字，只保留一个，把其余相同的数去掉，不同的数对应着不同的学生的学号。
     * 然后再把这些数从小到大排序，按照排好的顺序去找同学做调查。
     * 请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据，希望大家能正确处理)。
     *
     *
     * 1.TreeSet背后的结构是TreeMap,也就是红黑树，能够实现自动排序。通过equals和compareTo方法进行内容的比较。
     * 2.HashSet背后是HashMap,key是无序的，只能做外部排序。既然是Hash,那么就要重写其对象的hashCode和equals方法。
     *
     * 1.HashSet可以接受null值，有且只有一个
     * 2.TreeSet默认不可以接受null值，会直接抛出空指针异常
     * 3.set里没有重复数据，TreeSet里连虚无都没有
     *
     */

    public static void test(){
        Random random = new Random();
        TreeSet<Integer> integers = new TreeSet<>();
        HashSet<Integer> set = new HashSet<>();
        integers.add(null);
        for (int i = 0; i < 100; i++) {
            int l = random.nextInt(1000) + 1;
            integers.add(l);
            set.add(l);
        }
        for (Integer integer : integers) {
            System.out.println(integer.intValue());
        }
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        System.out.println("set.size() = " + set.size());
        for (Integer integer : set) {
            System.out.println(integer.intValue());
        }
    }


}
